package com.exam.test;

import java.util.concurrent.*;

public class FutureExample {
  public static void main(String[] args) throws InterruptedException, ExecutionException {
    // 创建一个固定大小的线程池
    ExecutorService executor = Executors.newFixedThreadPool(3);

    // 提交三个任务到线程池，每个任务模拟从不同的数据源获取数据
    Future<String> future1 = executor.submit(() -> {
      // 模拟长时间运行的任务
      Thread.sleep(10000);
      return "Data from Source 1";
    });

    Future<String> future2 = executor.submit(() -> {
      Thread.sleep(1000);
      return "Data from Source 2";
    });

    Future<String> future3 = executor.submit(() -> {
      Thread.sleep(1000);
      return "Data from Source 3";
    });

    // 在主线程中处理第一个数据源的结果
    // 这将阻塞主线程，直到future1完成
    String data1 = future1.get();
    process(data1); // 处理数据源1的数据

    // 此时，future2和future3可能已经完成或正在执行
    // 我们可以继续获取它们的结果，而不会影响其他已经提交的任务
    String data2 = future2.get();
    process(data2); // 处理数据源2的数据

    String data3 = future3.get();
    process(data3); // 处理数据源3的数据

    // 关闭线程池
    executor.shutdown();
  }

  private static void process(String data) {
    System.out.println("Processing: " + data);
  }
}
